﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using supervisor_de_cajas;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace supervisor_de_cajas
{
    public partial class clientefactura : Form
    {
        public clientefactura()
        {
            InitializeComponent();
        }
        Conexion conn = new Conexion();
        Gestion g = new Gestion();
        private void txtRE_TextChanged(object sender, EventArgs e)
        {
            if (txtRE.Text == "")
            {
                txtdigitoE.Text = "";
            }
            if (txtRE.TextLength == 7 || txtRE.TextLength == 8)
            {
                int rut = Convert.ToInt32(txtRE.Text);
                string digito = g.digitoVerificador(rut);
                txtdigitoE.Text = digito;
            }
        }

        private void txtRE_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else
                if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                {
                    e.Handled = false;
                }
                else
                {
                    //el resto de teclas pulsadas se desactivan 
                    e.Handled = true;
                }
        }

        private void txtRS_KeyDown(object sender, KeyEventArgs e)
        {

        }

        private void txtRS_Validating(object sender, CancelEventArgs e)
        {
            txtRS.Text = Regex.Replace(txtRS.Text.Trim(), @"\s+", " ");
        }

        private void txtRS_KeyPress(object sender, KeyPressEventArgs e)
        {
            //IsLetter(e.KeyChar) permite cualquier caracter entre la a y la z tanto mayusculas como minusculas //IsWhiteSpace permite espacio en blanco. //'\b' permite poder eliminar caracteres con BackSpace 
            if (!char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar) && e.KeyChar != '\b') { e.Handled = true; }
        }

        private void txtTC_Validating(object sender, CancelEventArgs e)
        {
            txtTC.Text = Regex.Replace(txtTC.Text.Trim(), @"\s+", " ");
        }

        private void txtTC_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else
                if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                {
                    e.Handled = false;
                }
                else
                {
                    //el resto de teclas pulsadas se desactivan 
                    e.Handled = true;
                }
        }
        public void llenarComboCE(ComboBox combo)
        {
            DataSet ds = new Gestion().buscarComboboxCE(); ;
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables["cliente_factura"].Rows.Count; i++)

                    combo.Items.Add(ds.Tables["cliente_factura"].Rows[i][0].ToString());
            }
        }

        private void clientefactura_Load(object sender, EventArgs e)
        {
            cbfiltro.SelectedIndex = 0;
            labelsesion.Text = g.recuperarNombreSesion(login.sesion) + " " + g.recuperarApellidoSesion(login.sesion);
            /*llenarComboCE(cbCE);
            llenarComboTS(cbTS);*/
            llenarComboCP(cbCP);
            timer1.Start();
            dgvbusq.DataSource = g.getClientefactura();
            dgvbusq.DataMember = "cliente_factura";
            cbCP.Text = "Elija";
            btnuevor.Enabled = false;
            
        }

        private void cbCE_SelectedIndexChanged(object sender, EventArgs e)
        {
            //txtidce.Text = Convert.ToString(g.RecuperarIdCE(cbCE.Text));
        }
        public void llenarComboTS(ComboBox combo)
        {
            DataSet ds = new Gestion().buscarComboboxTS(); ;
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables["cliente_factura"].Rows.Count; i++)

                    combo.Items.Add(ds.Tables["cliente_factura"].Rows[i][0].ToString());
            }
        }

        private void cbTS_SelectedIndexChanged(object sender, EventArgs e)
        {
            //txtidts.Text = Convert.ToString(g.RecuperarIdTS(cbTS.Text));
        }
        public void llenarComboCP(ComboBox combo)
        {
            DataSet ds = new Gestion().buscarComboboxCP(); ;
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables["cliente_factura"].Rows.Count; i++)

                    combo.Items.Add(ds.Tables["cliente_factura"].Rows[i][0].ToString());
            }
        }

        private void cbCP_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtidcp.Text = Convert.ToString(g.RecuperarIdCP(cbCP.Text));
        }

        private void btregistrar_Click(object sender, EventArgs e)
        {
            string rutC = txtRE.Text + txtdigitoE.Text;
            //int rut = int.Parse(rutC);
            if (btregistrar.Text.Equals("Registrar"))
            {
                if (txtRS.Text == "" || txtTC.Text == "")
                {
                    MessageBox.Show("Debe completar todos los datos.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (g.ExisteCliente_factura(rutC) == true)
                    {
                        MessageBox.Show("El rut ingresado ya existe en la base de datos", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        g.Limpiar(groupBox1);
                        txtRS.Focus();
                    }
                    else
                    {
                        if (cbCP.SelectedIndex == 0)
                        {
                            MessageBox.Show("Debe elejir una categoria de persona.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                        }
                        else
                        {
                            if (txtRE.Text.Length < 7) { MessageBox.Show("El rut ingresado es demasiado corto.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                            else
                            {
                                insertar();
                                g.Limpiar(groupBox1);
                                cbCP.SelectedIndex = 0;
                                txtTC.Text = "0";
                            }
                        }
                    }
                }
            }
            if (btregistrar.Text.Equals("Guardar"))
            {
                if (txtid.Text == "")
                {
                    MessageBox.Show("Debe seleccionar una filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {


                    
                            if (txtRE.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[1].Value.ToString() &&
                            txtid.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[0].Value.ToString() &&
                            txtRS.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[2].Value.ToString() &&
                            txtTC.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[3].Value.ToString() &&
                            cbCP.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[4].Value.ToString())
                            
                            {
                                MessageBox.Show("No se han realizado cambios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                btregistrar.Text = "Registrar";
                                g.Limpiar(groupBox1);
                                txtdigitoE.Visible = true;
                                txtRE.ReadOnly = false;
                                txtRE.Focus();
                                btnuevor.Enabled = false;
                                txtid.Text = "";
                                txtTC.Text = "0";
                                cbCP.SelectedIndex = 0;

                            }
                            else
                            {
                                if (g.ExisteCliente_factura(rutC) == true)
                                {
                                    MessageBox.Show("El rut ingresado ya existe en la base de datos", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                    g.Limpiar(groupBox1);
                                    txtRE.Focus();
                                }
                                else
                                {
                                    if (txtRE.Text.Length < 7) { MessageBox.Show("El rut ingresado es demasiado corto.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                                    else
                                    {
                                        modificar();
                                        btregistrar.Text = "Registrar";
                                        g.Limpiar(groupBox1);
                                        txtdigitoE.Visible = true;
                                        txtRE.ReadOnly = false;
                                        txtRE.Focus();
                                        btnuevor.Enabled = false;
                                        txtid.Text = "";
                                        txtTC.Text = "0";
                                        cbCP.SelectedIndex = 0;
                                    }
                                }                      
                    }
                }
            }
            listar();

        }
    

        
        private void insertar()
        {
            string rutcompleto = txtRE.Text + txtdigitoE.Text;
            try
            {
                conn.conectar();
                SqlCommand cmd = new SqlCommand("Cliente_factura_Insert", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@rut_empresa", SqlDbType.VarChar, 50).Value = rutcompleto;
                cmd.Parameters.Add("@razon_social", SqlDbType.VarChar, 50).Value = txtRS.Text;
                cmd.Parameters.Add("@total_compra_cliente", SqlDbType.VarChar, 50).Value = txtTC.Text;
                cmd.Parameters.Add("@idtipo_cliente_factura", SqlDbType.VarChar, 50).Value = txtidcp.Text;
                cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = txtestado.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Cliente Agregado con exito.!");
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion a la Base de datos.",ex.Message);
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }
        private void modificar()
        {
            string rutcompleto = txtRE.Text + txtdigitoE.Text;
            try
            {
                /*string status = "";
                if (chkactivo.Checked == true)
                    status = "Activo";
                if (chkinactivo.Checked == true)
                    status = "Inactivo";*/
                if (cbCP.SelectedIndex == 0)
                {
                    MessageBox.Show("Debe seleccionar una categoria de persona.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    conn.conectar();
                    SqlCommand cmd = new SqlCommand("Cliente_factura_Update", conn.conector);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@rut_empresa", SqlDbType.VarChar, 50).Value = txtRE.Text;
                    cmd.Parameters.Add("@razon_social", SqlDbType.VarChar, 50).Value = txtRS.Text;
                    cmd.Parameters.Add("@total_compra_cliente", SqlDbType.VarChar, 50).Value = txtTC.Text;
                    cmd.Parameters.Add("@idcliente_factura", SqlDbType.Int).Value = txtid.Text;
                    cmd.Parameters.Add("@idtipo_cliente_factura", SqlDbType.VarChar, 50).Value = txtidcp.Text;
                   // cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = txtestado.Text;
                    // cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = status;
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Los datos han sido actualizados.!");
                    cbCP.SelectedIndex = 0;
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion ala Base de datos."+ex);
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }

        private void btnuevor_Click(object sender, EventArgs e)
        {
            btnuevor.Enabled = false;
            txtdigitoE.Visible = true;
            txtRE.ReadOnly = false;
            txtRE.Focus();
            g.Limpiar(groupBox1);
            btregistrar.Text = "Registrar";
            txtRE.Focus();
            cbCP.SelectedIndex = 0;
            /*chkactivo.Visible = false;
            chkinactivo.Visible = false;
            labelestado.Visible = false;*/
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            reloj.Text = DateTime.Now.ToLongTimeString();
        }

        private void listar()
        {
            dgvbusq.DataSource = g.getClientefactura();
            dgvbusq.DataMember = "cliente_factura";
        }
        
        private void cbfiltro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbfiltro.Text == "Todos")
            {
                txtbusq.Enabled = false;
                listar();
            }
            else
            {
                txtbusq.Enabled = true;
                txtbusq.Text = "";
                if (cbfiltro.Text == "rut_empresa")
                {
                    txtbusq.MaxLength = 8;
                }
                if (cbfiltro.Text == "razon_social")
                {
                    txtbusq.MaxLength = 40;
                }
                if (cbfiltro.Text == "total_compra_cliente")
                {
                    txtbusq.MaxLength = 9;
                }
                if (cbfiltro.Text == "idtipo_cliente_factura")
                {
                   
                    txtbusq.MaxLength = 10;
                }
                if (cbfiltro.Text == "Activos")
                {
                    dgvbusq.DataSource = g.getActivos();
                    dgvbusq.DataMember = "cliente_factura";
                    txtbusq.Enabled = false; 
                    
                }
                if (cbfiltro.Text == "Inactivos")
                {
                    dgvbusq.DataSource = g.getInActivos();
                    dgvbusq.DataMember = "cliente_factura";
                    txtbusq.Enabled = false;
                    
                }
            }
        }

        private void dgvbusq_Click(object sender, EventArgs e)
        {
            btnuevor.Enabled = true;
            txtdigitoE.Visible = false;
            txtRE.ReadOnly = true;
            txtid.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[0].Value.ToString();
            txtRE.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[1].Value.ToString();
            txtdigitoE.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[5].Value.ToString();
            txtRS.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[2].Value.ToString();
            txtTC.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[3].Value.ToString();
            cbCP.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[4].Value.ToString();

            //txtestado.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[5].Value.ToString();
            //cbsexo.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[6].Value.ToString();
            /*if (estado.Equals("Activo"))
                 chkactivo.Checked = true;
             else
                 chkinactivo.Checked = true;*/

            btregistrar.Text = "Guardar";
        }

        private void bteliminar_Click(object sender, EventArgs e)
        {
            if (dgvbusq.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int reg = 0;
                int n = 0;
                for (int i = 0; i < dgvbusq.RowCount; i++)
                {

                    if (dgvbusq.Rows[i].Selected == true)
                    {
                       
                            //Codigo y mas codigo
                            int codigo;
                            int.TryParse(dgvbusq[0, i].Value.ToString(), out codigo);
                            g.eliminarCliente_factura(codigo);
                            txtid.Text = "";
                            n = n + 1;
                     
                        
                    }
                }
                /*if (n >= 1)
                {
                    MessageBox.Show("Nº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (n == 0)
                {
                    MessageBox.Show("No se han realizado cambios.\nNº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }*/
                listar();
                g.Limpiar(groupBox1);
                txtTC.Text = "0";
                btregistrar.Text = "Registrar";
                btnuevor.Enabled = false;
                inicializarValores();
                txtRE.ReadOnly = false;
                txtdigitoE.Visible = true;
                txtidcp.Text = "";
                
            }
        }
        private void inicializarValores()
        {
            
            
            cbCP.SelectedIndex = 0;
            

        }

        private void btactivar_Click(object sender, EventArgs e)
        {
            if (dgvbusq.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int reg = 0;
                int n = 0;
                for (int i = 0; i < dgvbusq.RowCount; i++)
                {

                    if (dgvbusq.Rows[i].Selected == true)
                    {
                       
                            //Codigo y mas codigo
                            int codigo;
                            int.TryParse(dgvbusq[0, i].Value.ToString(), out codigo);
                            g.ActivarCliente_factura(codigo);
                            txtid.Text = "";
                            n = n + 1;
                       
                        
                    }
                }
                /*if (n >= 1)
                {
                    MessageBox.Show("Nº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (n == 0)
                {
                    MessageBox.Show("No se han realizado cambios.\nNº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }*/
                listar();
                g.Limpiar(groupBox1);
                txtTC.Text = "0";
                btregistrar.Text = "Registrar";
                btnuevor.Enabled = false;
                txtRE.ReadOnly = false;
                txtdigitoE.Visible = true;
                inicializarValores();
                txtidcp.Text = "";
            }
        }

        private void txtbusq_TextChanged(object sender, EventArgs e)
        {
            if (cbfiltro.Text == "Todos")
            {
                listar();
            }
            else
            {
                dgvbusq.DataSource = g.verCliente_facturaFiltro(" WHERE " + cbfiltro.Text + " LIKE '%" + txtbusq.Text + "%' OR " + cbfiltro.Text + " LIKE '%" + txtbusq.Text + "%' OR " + cbfiltro.Text + " LIKE '%" + txtbusq.Text + "%' OR " + cbfiltro.Text + " LIKE '%" + txtbusq.Text + "%' OR " + cbfiltro.Text + " LIKE '%" + txtbusq.Text + "%'");
                dgvbusq.DataMember = "cliente_factura";
            }
        }

        private void txtbusq_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsSeparator(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; }



            if (cbfiltro.Text == "rut_empresa" || cbfiltro.Text == "total_compra_cliente")
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                    if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                    {
                        e.Handled = false;
                    }
                    else
                    {
                        //el resto de teclas pulsadas se desactivan 
                        e.Handled = true;
                    }
            }
            if (cbfiltro.Text == "tipo_cliente_factura.categoria_persona")
            {
                if (Char.IsLetter(e.KeyChar))
           {
               e.Handled = false;
           }
           else if (Char.IsControl(e.KeyChar))
           {
               e.Handled = false;
           }
           else if (Char.IsSeparator(e.KeyChar))
           {
               e.Handled = false;
           }
           else
           {
               e.Handled = true;
           }
       }
        }
    
            

        private void txtbusq_Validating(object sender, CancelEventArgs e)
        {
            
        }

        private void txtdigitoE_TextChanged(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void groupBox3_Enter(object sender, EventArgs e)
        {

        }

    }
}